package com.monkeyboy.spring.config;

import com.monkeyboy.spring.service.A;
import com.monkeyboy.spring.service.B;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

/**
 * @Author Gavin
 * @date 2021.03.08 11:29
 */
//如果不加@Configuration会破坏单例
@Component
//	@Configuration
public class AppComponent {
	@Bean
	public Z z() {
		return new Z();
	}

	@Bean
	public X x() {
		/**
		 * 如果不加@Configuration的话说明该类AppComponent方法就不会被代理，然后里面的Bean方法就不是以一个工厂类的方法产生bean的，
		 * 然后这里调用z()方法相当于就是调用了本类的一个方法而已，并不是调用的代理类的方法。然后就会创建一个新的Z对象，就破坏单例的产生行为了。
		 */
		System.out.println("-----------------@Component--------破坏单例------------");
		System.out.println(z());
		return new X();
	}
}
class Z{}
class X{}
